/**
 * 游戏常量定义
 * 
 * 职责：
 * 1. 定义游戏中使用的枚举和常量
 * 2. 避免魔法数字和硬编码字符串
 * 3. 提供类型安全的常量访问
 * 
 * @author AI Assistant
 * @date 2025-11-27
 */

// ============================================================================
// 场景层级名称
// ============================================================================

/**
 * 场景层级名称枚举
 */
export enum LayerNames {
    /** 背景层 */
    BACKGROUND = 'background',
    /** 游戏对象层 */
    GAME = 'game',
    /** 特效层 */
    EFFECT = 'effect',
    /** UI 层 */
    UI = 'ui',
    /** 顶层 */
    TOP = 'top'
}

// ============================================================================
// 资源 Bundle 名称
// ============================================================================

/**
 * 资源包名称枚举
 */
export enum BundleNames {
    /** 内置资源 */
    RESOURCES = 'resources',
    /** 怪物资源 */
    MONSTERS = 'monsters',
    /** 游戏资源 */
    GAME = 'game'
}

// ============================================================================
// 事件名称
// ============================================================================

/**
 * 游戏事件名称枚举
 */
export enum EventNames {
    // 游戏生命周期
    GAME_START = 'game:start',
    GAME_PAUSE = 'game:pause',
    GAME_RESUME = 'game:resume',
    GAME_STOP = 'game:stop',
    GAME_RESTART = 'game:restart',
    
    // 场景事件
    SCENE_LOAD_START = 'scene:load:start',
    SCENE_LOAD_COMPLETE = 'scene:load:complete',
    SCENE_UNLOAD = 'scene:unload',
    
    // 关卡事件
    LEVEL_START = 'level:start',
    LEVEL_COMPLETE = 'level:complete',
    LEVEL_FAIL = 'level:fail',
    
    // 玩家事件
    PLAYER_SPAWN = 'player:spawn',
    PLAYER_DEATH = 'player:death',
    PLAYER_LEVEL_UP = 'player:levelup',
    PLAYER_HP_CHANGE = 'player:hp:change',
    
    // 敌人事件
    ENEMY_SPAWN = 'enemy:spawn',
    ENEMY_DEATH = 'enemy:death',
    
    // UI 事件
    UI_BUTTON_CLICK = 'ui:button:click',
    UI_SHOW = 'ui:show',
    UI_HIDE = 'ui:hide',
    
    // 资源事件
    RESOURCE_LOAD_START = 'resource:load:start',
    RESOURCE_LOAD_COMPLETE = 'resource:load:complete',
    RESOURCE_LOAD_FAIL = 'resource:load:fail',
}

// ============================================================================
// 标签（Tag Components）
// ============================================================================

/**
 * ECS 标签组件名称
 */
export enum TagNames {
    /** 玩家标签 */
    PLAYER = 'PlayerTag',
    /** 敌人标签 */
    ENEMY = 'EnemyTag',
    /** 子弹标签 */
    BULLET = 'BulletTag',
    /** 可拾取物标签 */
    PICKABLE = 'PickableTag',
    /** 已死亡标签 */
    DEAD = 'DeadTag',
    /** 无敌标签 */
    INVINCIBLE = 'InvincibleTag',
    /** 可见标签 */
    VISIBLE = 'VisibleTag',
    /** 隐藏标签 */
    HIDDEN = 'HiddenTag'
}

// ============================================================================
// 动画名称
// ============================================================================

/**
 * 动画名称枚举
 */
export enum AnimationNames {
    // 玩家动画
    PLAYER_IDLE = 'player_idle',
    PLAYER_WALK = 'player_walk',
    PLAYER_RUN = 'player_run',
    PLAYER_ATTACK = 'player_attack',
    PLAYER_DEATH = 'player_death',
    PLAYER_HIT = 'player_hit',
    
    // 敌人动画
    ENEMY_IDLE = 'enemy_idle',
    ENEMY_WALK = 'enemy_walk',
    ENEMY_ATTACK = 'enemy_attack',
    ENEMY_DEATH = 'enemy_death',
    
    // UI 动画
    UI_FADE_IN = 'ui_fade_in',
    UI_FADE_OUT = 'ui_fade_out',
    UI_SCALE_IN = 'ui_scale_in',
    UI_SCALE_OUT = 'ui_scale_out',
}

// ============================================================================
// 音频名称
// ============================================================================

/**
 * 音频名称枚举
 */
export enum AudioNames {
    // 背景音乐
    BGM_MENU = 'bgm_menu',
    BGM_BATTLE = 'bgm_battle',
    BGM_BOSS = 'bgm_boss',
    
    // 音效
    SFX_BUTTON_CLICK = 'sfx_button_click',
    SFX_ATTACK = 'sfx_attack',
    SFX_HIT = 'sfx_hit',
    SFX_DEATH = 'sfx_death',
    SFX_COLLECT = 'sfx_collect',
    SFX_LEVEL_UP = 'sfx_levelup',
}

// ============================================================================
// 游戏常量
// ============================================================================

/**
 * 游戏数值常量
 */
export const GameConstants = {
    /** 最大玩家等级 */
    MAX_PLAYER_LEVEL: 99,
    
    /** 最大背包容量 */
    MAX_INVENTORY_SIZE: 100,
    
    /** 金币上限 */
    MAX_GOLD: 999999999,
    
    /** 经验值上限 */
    MAX_EXP: 999999999,
    
    /** 伤害暴击倍率 */
    CRITICAL_DAMAGE_MULTIPLIER: 2.0,
    
    /** 闪避成功概率 */
    DODGE_CHANCE: 0.1,
    
    /** 重力加速度 */
    GRAVITY: 9.8,
} as const;

// ============================================================================
// 时间常量
// ============================================================================

/**
 * 时间相关常量
 */
export const TimeConstants = {
    /** 秒转毫秒 */
    SECOND_TO_MS: 1000,
    
    /** 分钟转秒 */
    MINUTE_TO_SECOND: 60,
    
    /** 小时转秒 */
    HOUR_TO_SECOND: 3600,
    
    /** 一天的秒数 */
    DAY_TO_SECOND: 86400,
} as const;

// ============================================================================
// UI 常量
// ============================================================================

/**
 * UI 相关常量
 */
export const UIConstants = {
    /** 默认淡入时间 */
    DEFAULT_FADE_IN_TIME: 0.3,
    
    /** 默认淡出时间 */
    DEFAULT_FADE_OUT_TIME: 0.3,
    
    /** 默认缩放动画时间 */
    DEFAULT_SCALE_TIME: 0.2,
    
    /** 提示框显示时间 */
    TOAST_DURATION: 2.0,
    
    /** 按钮点击间隔（防抖）*/
    BUTTON_CLICK_INTERVAL: 0.3,
} as const;

// ============================================================================
// 网络常量
// ============================================================================

/**
 * 网络协议常量
 */
export const NetworkConstants = {
    /** 协议版本 */
    PROTOCOL_VERSION: '1.0.0',
    
    /** 最大消息大小（字节）*/
    MAX_MESSAGE_SIZE: 1024 * 1024, // 1MB
    
    /** 心跳协议 ID */
    HEARTBEAT_PROTOCOL: 0,
    
    /** 登录协议 ID */
    LOGIN_PROTOCOL: 1001,
} as const;

// ============================================================================
// 类型导出
// ============================================================================

export type LayerNamesType = typeof LayerNames;
export type BundleNamesType = typeof BundleNames;
export type EventNamesType = typeof EventNames;
export type GameConstantsType = typeof GameConstants;

// ============================================================================
// 使用示例
// ============================================================================

/**
 * 使用示例：
 * 
 * ```typescript
 * import { LayerNames, BundleNames, EventNames, GameConstants } from '../config/Constants';
 * 
 * // 使用层级名称
 * const layer = sceneCoordinator.getLayer(LayerNames.GAME);
 * 
 * // 使用 Bundle 名称
 * const prefab = await resLoader.load(BundleNames.MONSTERS, 'enemy/goblin');
 * 
 * // 使用事件名称
 * eventBus.emit(EventNames.PLAYER_LEVEL_UP, { level: 10 });
 * 
 * // 使用游戏常量
 * if (player.level >= GameConstants.MAX_PLAYER_LEVEL) {
 *     console.log('已达到最大等级');
 * }
 * 
 * // 使用动画名称
 * animation.play(AnimationNames.PLAYER_ATTACK);
 * 
 * // 使用音频名称
 * audioManager.playBGM(AudioNames.BGM_BATTLE);
 * ```
 */

